package servicos.atualizacao;
/**
 * Importação das bibliotecas necessárias para a implementação da classe.
 */
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * @author Filipe
 */

public class Transacao {
    
    /**
     * Variavel de conexão
     */
	private static Connection con;
	
	/**
         * Rece um statement SQL
         */
	private static Statement stm;
	
	/**
         * Guarda um resultado de uma consulta
         */
	private static ResultSet rs;
	
	/**
         * Nome do Driver MySQL
         */
	private static String driver = "com.mysql.jdbc.Driver";
	
	/**
         * Onde o banco está jdbc:mysql://localhost:3306/mysql
         */
	private static String url = "jdbc:mysql://localhost:3306/";
	
	/**
         * Usuario e senha do Banco
         */
	private static String usuario = "root";
	private static String senha = "root";
	
	/**
         * nome do Banco
         */
	private static String banco = "saibv";

	/**
         * Inicia uma nova transação
         */
	public static void abrir() throws Exception{
		if(con == null){
		
                    /**
                     * Cria um objeto para o driver MySQL
                     */
			Class.forName( driver );
			
			/**
                         *  Tenta criar uma conexão
                         */
			con = DriverManager.getConnection(url+banco+"?user="+usuario+"&password="+senha);
			
			/**
                         * Inicia uma transacao
                         */
			executar("START TRANSACTION;");
		}
	}

	/**
         * Faz uma consulta (Comando SELECT) no banco e inicia a variavel ResultSet que conterá os resultados
         */
	public static void consultar(String sql) throws Exception{
		stm = con.createStatement();
		stm.execute(sql);
		rs = stm.getResultSet();
	}

	/**
         * Excuta qualquer comando do banco (INSERT, UPDATE, DELETE, ALTER TABLE etc)
         */
	public static void executar(String sql) throws Exception{
		stm = con.createStatement();
		stm.execute(sql);
	}

	/**
         * Comita a transacao. Confirma tudo o que foi feito até agora no banco
         */
	public static void commit() throws Exception{
		executar("COMMIT;");
		con = null;
	}

	/**
         * Desfaz todas as operações desde o inicio da transacao
         */
	public static void rollback(){
		try {
			executar("ROLLBACK;");
			con = null;
		}
		catch (Exception ex) {
			ex.printStackTrace();
		}
	}

	/**
	 * @return the rs
	 */
	public static ResultSet getRs() {
		return rs;
	}

	/**
	 * @return the current connection
	 */
	public static Connection getCon(){
		return con;
	}
	
    
}
